[小ネタ] Sumo LogicでCloudTrailのログからAWSアカウントIDを取得する #sumologic
背景
Sumo LogicでCloudTrailの監視をしていると、たまに「このログ、どのAWSアカウントから出たものだろう?」と思うことがあります。
というのも、そもそもCloudTrailのログには、「どのAWSアカウントIDで発生したログか」という情報がフィールドとして存在しないためです。
userIdentity.accountId
として記録されている情報はあくまで「操作したユーザの情報」であるため、日常的は問題ない場面も多そうですが、AWSの仕組み上別のAWSアカウントに権限を移譲できるため、完全ではありません。
そもそも全てのログにこの情報が記録されるわけでもないので、まるっと見たい時にはちょっと使いづらいです。
じゃあどうするか、と考えてみたところ、簡単な方法がみつかりました。
ログファイル名(S3オブジェクトファイル名)からパースすれば良さそうです。
解説
上述したAWSドキュメントにあるように、CloudTrailのログは下記のフォーマットのオブジェクト名をもっています。
AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat
実際にはこれに、デフォルトのプレフィクスが追加されるため、バケット名を除けば例えば以下のような感じになります。
prefix_name/AWSLogs/Account ID/CloudTrail/region/YYYY/MM/DD/AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat.json.gz
Sumo Logic上ではこのファイル名を _sourceName
として取得できるため、ここからパースすればAWSアカウント名が取得できますね。
Built-in Metadata - Sumo Logic
_sourceName
- The name of the log file, determined by the path you entered when you configured the Source.
取得には parse
句を使い、 _sourceName
からパターンマッチで取得するのが手軽と思います。
| parse field=_sourceName "AWSLogs/*/CloudTrail" as aws_account_id
実際に検索してみたところ、こんな感じになります。
まとめ
ログ中にないパラメータを、ファイル名から取得してみました。
Sumo Logicでは、必ずしもログ本文中やソースカテゴリにない情報をもとにドリルダウンが可能なので、参考にしてみて下さい。